home *** CD-ROM | disk | FTP | other *** search
- 10 sys36864
- 20 .opt oo
- 30 *= $c000
- 40 ; dieses programm definiert zwei
- 50 ; neue basicbefehle
- 60 ; - beep erzeugt einen ton
- 70 ; - erase x loescht bildsch. zeile x
- 80 ; nikolaus heusler, muenchen, 3.91
- 100 ibas =776;vektor fuer basicbefehl
- 110 inter =$a7ae;interpreterschleife
- 120 oldbas =$a7e4;alten befehl ausfuehren
- 130 sid =54272;soundchip basisadresse
- 140 chrget =115;naechstes zeichen holen
- 150 illquan =$b248;illegal quantity error
- 160 getx =$b79e;holt byte-wert nach x
- 170 clrx =59903;loescht bildschirmzeile x
- 180 ok =$e18d;ok ausgeben
- 190 tmp =2;zwischenspeicher
- 200 ptr =122;zeiger auf basicbefehl
- 300 ; --- neue befehle definieren
- 310 lda #<neubef:ldy #>neubef;zeiger auf neue routine
- 320 sta ibas:sty ibas+1;vektor verbiegen
- 330 jmp ok;ok ausgeben
- 400 ; --- neue befehls-routine
- 410 neubef lda ptr:ldy ptr+1:sta tmp:sty tmp+1;basic-pointer retten:ldx #0
- 420 ; --- test, ob befehl nr. 1
- 430 test1 jsr chrget;naechstes zeichen holen:cmp text1,x;befehlswort pruefen
- 440 bne nein1;wenn nicht, dann befehl 2 pruefen
- 450 inx:cpx #4;laenge des befehlswortes:bne test1;nicht erreicht, weiter testen
- 460 jsr pieps;befehl ausfuehren
- 470 ; --- neuen befehl fertig ausgefuehrt
- 480 fertig jmp inter;weiter mit interpreterschleife
- 500 ; --- war nicht der erste befehl
- 510 nein1 lda tmp:ldy tmp+1:sta ptr:sty ptr+1;pointer zurueckholen:ldx #0
- 520 ; --- test, ob befehl nr. 2
- 530 test2 jsr chrget;naechstes zeichen holen:cmp text2,x;befehlswort pruefen
- 540 bne nein2;wenn nicht, dann fertig
- 550 inx:cpx #5;laenge des befehlswortes:bne test2;nicht erreicht, weiter testen
- 560 jsr loesch;befehl ausfuehren
- 570 jmp fertig;und weiter wie oben
- 600 ; --- war nicht der zweite befehl
- 610 nein2 lda tmp:ldy tmp+1:sta ptr:sty ptr+1;pointer zurueckholen
- 620 jmp oldbas;alten basic-befehl ausfuehren
- 700 ; --- routinen der neuen befehle
- 710 ; --- befehl 1 - ton ausgeben
- 720 pieps jsr chrget;naechstes zeichen:lda #0:ldx #24;sid-register loeschen
- 730 clrsid sta sid,x:dex:bpl clrsid;null in alle register schreiben
- 740 lda #15:sta sid+24;lautstaerke auf 15
- 750 lda #100:sta sid+1;tonhoehe:lda #240:sta sid+6;wellenform
- 760 lda #17:sta sid+4;ton ein
- 770 ldx #0:ldy #0;warteschleife
- 780 wait nop:dex:bne wait:dey:bne wait;wartet ca. 1/2 sekunde
- 790 lda #16:sta sid+4;ton aus:rts;fertig
- 800 ; befehl 2 - bildschirmzeile loeschen
- 810 loesch jsr chrget;naechstes zeichen:jsr getx;nummer der zeile holen
- 820 cpx #25;groesser als 24:bcc stimmt;kleiner, dann ok
- 830 jmp illquan;sonst fehlermeldung ausgeben
- 840 stimmt jsr clrx;bildschirmzeile nr. x loeschen:rts;fertig
- 900 ; --- befehls-texte
- 910 text1 .asc "beep";text im ascii-code
- 920 text2 .asc "erase";text im ascii-code
-